package com.alibaba.middleware.hsf.dubbo;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.alibaba.middleware.hsf.guide.api.service.HelloWorldService;
import com.alibaba.middleware.hsf.guide.server.service.HelloWorldServiceImpl;

import java.util.concurrent.TimeUnit;

/**
 * @author guanghao on 23/03/2018.
 */
public class DubboProvider {
    public static void main(String[] args) {

        System.setProperty("java.net.preferIPv4Stack", "true");
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("dubbo");
        // 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("multicast://224.5.6.7:1234");
//        registry.setAddress("zookeeper://127.0.0.1:2181");
//        registry.setUsername("aaa");
//        registry.setPassword("bbb");
        // 服务提供者协议配置
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(12345);
        protocol.setThreads(200);
        // 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口
        // 服务提供者暴露服务配置
        ServiceConfig<HelloWorldService> service = new ServiceConfig<HelloWorldService>(); // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
        service.setApplication(application);
        service.setRegistry(registry); // 多个注册中心可以用setRegistries()
        service.setProtocol(protocol); // 多个协议可以用setProtocols()
        service.setInterface(HelloWorldService.class.getName());
        service.setRef(new HelloWorldServiceImpl());
        service.setFilter("customServerFilter");
//        service.setVersion("1.0.0");
//        service.setGroup("HSF");
        // 暴露及注册服务
        service.export();

        try {
            TimeUnit.MINUTES.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.exit(1);
    }
}
